﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ProgNetComponents.Classes
{
    /// <summary>
    /// Base class to store any object
    /// </summary>
    /// <typeparam name="T">Object type</typeparam>
    public class ObjectHolder<T>
    {
        /// <summary>
        /// Creates instance of ObjectHolder
        /// </summary>
        /// <param name="value">Object value</param>
        public ObjectHolder(T value)
        {
            Value = value;
        }
        /// <summary>
        /// Creates instance of ObjectHolder
        /// </summary>
        public ObjectHolder()
        {

        }

        /// <summary>
        /// Gets or sets value
        /// </summary>
        public T Value { get; set; }
    }
    /// <summary>
    ///  Base class to store any objects
    /// </summary>
    /// <typeparam name="T1"></typeparam>
    /// <typeparam name="T2"></typeparam>
    public class ObjectHolder<T1, T2>
    {
        /// <summary>
        /// Creates instance of ObjectHolder
        /// </summary>
        public ObjectHolder()
        {

        }
        /// <summary>
        /// Creates instance of ObjectHolder
        /// </summary>
        /// <param name="value1">Value1</param>
        /// <param name="v2">Value2</param>
        public ObjectHolder(T1 value1, T2 v2)
        {
            Value1 = value1;
            Value2 = v2;
        }
        /// <summary>
        /// Gets or sets Value1
        /// </summary>
        public T1 Value1
        {
            get;
            set;
        }
        /// <summary>
        /// Gets or sets Value2
        /// </summary>
        public T2 Value2
        {
            get;
            set;
        }
    }
    /// <summary>
    /// Base class to store any objects
    /// </summary>
    /// <typeparam name="T1"></typeparam>
    /// <typeparam name="T2"></typeparam>
    /// <typeparam name="T3"></typeparam>
    public class ObjectHolder<T1, T2, T3>
    {
        /// <summary>
        /// Creates instance of ObjectHolder
        /// </summary>
        public ObjectHolder()
        {
            
        }
        /// <summary>
        /// Creates instance of ObjectHolder
        /// </summary>
        /// <param name="value1">Value 1</param>
        /// <param name="v2">Value 2</param>
        /// <param name="v3">Value 3</param>
        public ObjectHolder(T1 value1, T2 v2, T3 v3)
        {
            Value1 = value1;
            Value2 = v2;
            Value3 = v3;
        }
        /// <summary>
        /// Gets or sets Value 1
        /// </summary>
        public T1 Value1
        {
            get;
            set;
        }
        /// <summary>
        /// Gets or sets Value 2
        /// </summary>
        public T2 Value2
        {
            get;
            set;
        }
        /// <summary>
        /// Gets or sets Value 3
        /// </summary>
        public T3 Value3
        {
            get;
            set;
        }
    }
    /// <summary>
    /// Base class to store any objects
    /// </summary>
    /// <typeparam name="T1"></typeparam>
    /// <typeparam name="T2"></typeparam>
    /// <typeparam name="T3"></typeparam>
    /// <typeparam name="T4"></typeparam>
    public class ObjectHolder<T1, T2, T3, T4>
    {
        /// <summary>
        /// Creates instance of ObjectHolder
        /// </summary>
        public ObjectHolder()
        {

        }
        /// <summary>
        /// Creates instance of ObjectHolder
        /// </summary>
        /// <param name="value1">Value 1</param>
        /// <param name="v2">Value 2</param>
        /// <param name="v3">Value 3</param>
        /// <param name="v4">Value 4</param>
        public ObjectHolder(T1 value1, T2 v2, T3 v3, T4 v4)
        {
            Value1 = value1;
            Value2 = v2;
            Value3 = v3;
            Value4 = v4;
        }
        /// <summary>
        /// Gets or sets Value 1
        /// </summary>
        public T1 Value1
        {
            get;
            set;
        }
        /// <summary>
        /// Gets or sets Value 2
        /// </summary>
        public T2 Value2
        {
            get;
            set;
        }
        /// <summary>
        /// Gets or sets Value 3
        /// </summary>
        public T3 Value3
        {
            get;
            set;
        }
        /// <summary>
        /// Gets or sets Value 4
        /// </summary>
        public T4 Value4
        {
            get;
            set;
        }
    }
}
